C++11 auto 和 size_type
全部标签 考虑下面的代码:intmain(){inti{};auto&c=static_cast(i);//(1)auto&v=static_cast(i);//(2)}(1)编译成功,(2)不被接受:error:volatilelvaluereferencetotype'volatileint'cannotbindtoatemporaryoftype'volatileint'为什么auto不能变成volatileint?为什么auto&可以变成constint并绑定(bind)到constint&&?是因为auto&实际上绑定(bind)到一个在赋值右侧创建的临时对象吗?但是,为什么auto&
我试图了解何时实际使用了iterator::value_type。因为,迭代器的所有运算符,似乎只使用iterator::pointer和iterator::reference。问题iterator::value_type是否真的用于某些事情?附加问题:迭代器是否继承自std::iterator提出一些语义问题?编辑:要理解我为什么问这个问题,是因为我正在为一种类型的迭代器工作,pointer和reference是代理类。 最佳答案 我可以考虑在通用代码中使用它。假设您在C++11中编写一个对范围求和的通用函数。你可以把它写成tem
为什么auto_ptr中有模板复制构造函数和重写操作函数?C++的ISO标准为auto_ptr指定了以下接口(interface)。(这是直接从2003年的标准中复制出来的。)namespacestd{templatestructauto_ptr_ref{};templateclassauto_ptr{public:typedefXelement_type;//20.4.5.1construct/copy/destroy:explicitauto_ptr(X*p=0)throw();auto_ptr(auto_ptr&)throw();templateauto_ptr(auto_ptr
例题:(1)Acwing836.合并集合 并查集就是把每一个集合看成一棵树,记录每个节点的父节点。合并集合就是把一棵树变成另一棵树的子树,即把一棵树的父节点变为另一棵树的父节点的儿子。查询是否在同一集合就是看他们的根节点是否相同。在查找过程中可以路径加速,把每个点直接连到根节点。#include#include#includeusingnamespacestd;constintN=1e5+10;intp[N];intfind(intx){if(p[x]!=x)p[x]=find(p[x]);returnp[x];}intmain(){intn,m;scanf("%d%d",&n,&m);
我正在尝试编写一个函数,根据枚举的运行时值将值的枚举映射到一组类型。我意识到您不能根据枚举的运行时值返回不同的类型,因为编译器不知道要分配多少堆栈空间。但是,我正在尝试将其编写为constexpr函数,使用新的if-constexpr功能来实现它。我收到来自clang的错误,提示我使用了非法指定的模板参数。有人知道如何实现吗?编辑:这是一个更容易理解的版本,更简洁地展示了我的问题:http://coliru.stacked-crooked.com/a/2b9fef340bd167a8旧代码:#include#include#includenamespace{enumclassshape
让我们举一个最简单的例子:公式1:std::vectorvec;//add10E11elementsfor(std::size_tn=0;n公式2:std::vectorvec;//add10E11elementsfor(std::vector::size_typen=0;n当然,unsignedint或任何不合适的数据类型在这里都不起作用,我们必须编译x64。我的问题是:在任何情况下,第一个公式是否会导致问题,或者我们是否可以安全地始终以这种更短的表示法来编写它?如果它们很容易覆盖(x86、任何其他容器、size_type的其他应用程序),我也会对类似的设置感兴趣。
如何在C++11及更高版本中检查线程是否已完成工作?我一直在阅读文档并编写了以下代码:#include#includevoidmythread(){//dosomestuff}intmain(){std::threadfoo(mythread);if(foo.joinable()){foo.join();//dosomenextstuff}}joinable只告诉线程已经开始工作,但我想知道如何编写代码来检查线程是否完成工作。例如:#include#includevoidmythread(){//dosomestuff}intmain(){std::threadfoo(mythread
考虑以下程序:#include#include#includeintmain(int,char**){std::basic_stringstreamstream;stream.put(u'\u0100');std::cout输出是:Bad:0Bad:0Bad:1设置badbit的原因似乎是因为如果字符等于std::char_traits::eof(),'put'设置badbit。我现在不能再投入流中了。在http://en.cppreference.com/w/cpp/string/char_traits它指出:int_type:anintegertypethatcanholdallv
我正在尝试安装nanaC++library在Ubuntu16.04中。我下载并解压到我的helloworld文件所在的目录,然后进入makefile所在的目录;nana/build/makefile,输入make却报错X11/Xft/Xft.h:nosuchfileordirectory我检查了/usr/include/X11是的,它不在那里。谷歌搜索并没有帮助找出安装Xft的热点。我该怎么做?还是我做错了什么? 最佳答案 这个header似乎在libxft-dev包中。用你的包管理器安装它。如果合适,请尝试:sudoaptinst
代码是这样的classC{public:intm1;intm2;C(intm);}C::C(intm):m1(m){};intmain(){C*c=newC(1);coutm2我想知道要初始化的值m2是什么。我认为c是值初始化的,而m2是默认初始化的。我用C++11和g++4.8.4测试,m2好像一直是0。我以为0是默认初始化,但默认初始化不是0。所以初始化为0就可以保证了? 最佳答案 c是copyinitialized,而不是值初始化。m2实际上是默认初始化的,是的,但这并不意味着它的值总是0(这将由值和聚合初始化保证)。int(